/**
 * 纯js写的多语言工具
 * 依赖config.js（getLang/getData/setData/getQueryString）
 */
var I18n = {
    langJson: {},
    i18nLang: {},
    opts: {},
    init: function(opts) {
        I18n.opts = Object.assign({
            lang: getLang(),
            filePath: '/i18n/',
            filePrefix: '',
            fileSuffix: ''
        }, opts)
        I18n.langJson = I18n.opts.locale || {}
        I18n.setLang(I18n.opts.lang)
    },
    setLang: function(lang) {
        setData('lang', lang)
        I18n.opts.url = I18n.opts.filePath + I18n.opts.filePrefix + lang + I18n.opts.fileSuffix + ".json"
        I18n.loadJson(I18n.opts.url, lang)
    },
    loadJson: function(url, lang) {
        lang = lang || getLang()
        if (!I18n.langJson[lang]) {
            I18n.get(url, function(resp) {
                I18n.langJson[lang] = resp
                I18n.render(I18n.opts.targetEle)
            })
        } else {
            I18n.render(I18n.opts.targetEle)
        }
    },
    render: function(ele) {
        I18n.i18nLang = I18n.langJson[getLang()]
        ele = ele || document
        ele.querySelectorAll("*[locale-html]").forEach(function (eleItem) {
            var locale_v = I18n.localeValue(eleItem.getAttribute("locale-html"))
            if (locale_v !== 'undefined') {
                eleItem.innerHTML = locale_v
            }
        })
        ele.querySelectorAll('*[locale-placeholder]').forEach(function(eleItem) {
            var locale_v = I18n.localeValue(eleItem.getAttribute("locale-placeholder"))
            if (locale_v !== 'undefined') {
                eleItem.setAttribute('placeholder', locale_v)
            }
        })
        ele.querySelectorAll('*[locale-title]').forEach(function(eleItem) {
            var locale_v = I18n.localeValue(eleItem.getAttribute("locale-title"))
            if (locale_v !== 'undefined') {
                eleItem.setAttribute('title', locale_v)
            }
        })
    },
    localeValue: function(key) {
        if (key) {
            var arr = key.split('.')
            var tmp = I18n.i18nLang
            for(var i = 0; i < arr.length; i++) {
                if (tmp) {
                    tmp = tmp[arr[i]]
                } else {
                    console.warn(key)
                    return arr[arr.length - 1]
                }
            }
            return tmp
        }
        return ''
    },
    get: function(url, callback) {
        var xhr = new XMLHttpRequest()
            xhr.open('GET', url, true)
            xhr.send()
            xhr.onreadystatechange = function() {
                if (xhr.readyState === 4 && xhr.status === 200) {
                    var resp = xhr.responseText
                    try {resp=JSON.parse(resp)} catch(e) {}
                    callback && callback(resp)
                }
            }
    }
}
if (getQueryString('auto') !== 'false') {
    I18n.init()
}